package common;

/**
 *Interfaccia del Client. Si occupa di definire i metodi che ogni classe che si occupa di comunicare con l'interfaccia grafica ed eventualmente con un server deve avere.
 */
public interface Client {
	
	/**
	 * Metodo usato per richiedere al server la creazione di un utente. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.
	 * @param usr Parametro indicante il nomeUtente scelto dall'utente.
	 * @param pass Password selezionata dall'utente.
	 */
	public void creaUtente(String usr, String pass);
	
	/**
	 * Metodo usato per richiedere al server un login. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso di avvenuto login, il client chiama un metodo sull'interfaccia del server passandogli il proprio indirizzo ip, permettendo cosi' al server il download dell'interfaccia del client.
	 * @param usr Parametro indicante il nomeUtente con cui l'utente si e' precedentemente registato.
	 * @param pass Password precedentemente scelta dall'utente.
	 */
	public void login(String usr, String pass);
	
	/**
	 * Metodo usato per richiedere al server la creazione di una razza da parte di un utente. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 * @param nome Nome scelto dall'utente per identificare la propria razza di dinosauri.
	 * @param tipo Lettera indicante il tipo di dinosauro prescelto: C per Carnivoro, E per Erbivoro.
	 */
	public void creaRazza(int tok,String nome,String ti);
	
	/**
	 * Metodo usato per richiedere al server l'accesso alla partita corrente. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso il giocatore sia il primo ad entrare in partita (nell'array risultante sara' presente un true nella seconda cella), il metodo chiama direttamente il cambioTurno, per permettere al server di chiedere al giocatore il confermaTurno. 
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 */
	public void accessoPartita(int tok);
	
	/**
	 * Metodo usato per richiedere al server l'uscita dalla partita corrente. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 */
	public void uscitaPartita(int tok);
	
	/**
	 * Metodo usato per richiedere al server la lista dei giocatori in partita. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 */
	public void listaGiocatori(int tok);
	
	/**
	 * Metodo usato per richiedere al server la classifica della partita in corso. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso di conferma, il metodo si occupa di prendere i dati relativi ad ogni utente in classifica e metterlo in una matrice, da passare poi all'interfaccia grafica.
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 */
	public void classifica(int tok);
	
	/**
	 * Metodo usato per richiedere al server il logout con relativa disconnessione. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 */
	public void logout(int tok);
	
	/**
	 * Metodo usato per richiedere al server la mappaGenerale. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso di conferma, il metodo prende le informazioni relative alla mappa generale (come numero righe, colonne, etc) e le pone in delle variabili precedentemente istanziate da passare poi all'interfaccia grafica.
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 */
	public void mappaGenerale(int tok);
	
	/**
	 * Metodo usato per richiedere al server la lista dei dinosauri dell'utente. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso di conferma, preleva i nomi dei dinosauri presenti e li pone in un array, da passare poi all'interfaccia grafica.
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 */
	public void listaDinosauri(int tok);
	
	/**
	 * Metodo usato per richiedere al server la vista locale del dinosauro interessato. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso di conferma, il metodo prende le informazioni relative alla vista locale (come numero righe, colonne, etc) e le pone in delle variabili precedentemente istanziate da passare poi all'interfaccia grafica.
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 * @param id Stringa identificatrice del dinosauro di cui si vuole la vista locale.
	 */
	public void vistaLocale(int tok, String id);
	
	/**
	 * Metodo usato per richiedere al server lo stato del dinosauro interessato. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso di conferma, il metodo prende le informazioni relative al dinosauro (come vita, energia, etc) e le pone in delle variabili precedentemente istanziate da passare poi all'interfaccia grafica.
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 * @param id Stringa identificatrice del dinosauro di cui si vuole la vista locale.
	 */
	public void statoDinosauro(int tok, String id);
	
	/**
	 * Metodo usato per richiedere al server lo spostamento del dinosauro interessato. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso di conferma, il metodo verifica se si e' svolto o meno un combattimento. In caso positivo, se il dinosauro e' morto, manda una stringa "p" all'interfaccia client quando chiama il metodo muoviDinosauro dell'interfaccia grafica.<br \>
	 * In caso di errore con relativo numero identificativo 101, il dinosauro e' morto e l'intera razza e' estinta. 
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 * @param id Stringa identificatrice del dinosauro di cui si vuole la vista locale.
	 * @param x Posizione numero riga scelta per lo spostamento.
	 * @param y Posizione numero colonna scelta per lo spostamento.
	 */
	public void muoviDinosauro(int tok, String id, int x, int y);
	
	/**
	 * Metodo usato per richiedere al server la crescita del dinosauro interessato. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso di errore con relativo numero identificativo 101, il dinosauro e' morto e l'intera razza e' estinta. 
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 * @param id Stringa identificatrice del dinosauro di cui si vuole la vista locale.
	 */
	public void cresciDinosauro(int tok, String id);
	
	/**
	 * Metodo usato per richiedere al server la deposizione di un uovo da parte del dinosauro interessato. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso di errore con relativo numero identificativo 101, il dinosauro e' morto e l'intera razza e' estinta. 
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 * @param id Stringa identificatrice del dinosauro di cui si vuole la vista locale.
	 */
	public void deponiUovo(int tok, String id);
	
	/**
	 * Metodo usato per richiedere al server la conferma del turno. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 */
	public void confermaTurno(int tok);
	
	/**
	 * Metodo usato per richiedere al server il passaggio del proprio turno. Controllo di conferma/errore tramite il controllo della prima cella dell'array ritornato.<br \>
	 * In caso di assenza di errori, viene chiamato automaticamente il cambio turno.
	 * @param tok Parametro indicante il token dato all'utente al momento del login.
	 */
	public void passaTurno(int tok);
}
